<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ECMA基础测试</title>
</head>

<body>
    <script>
        //  1.  Javascript 的基础类型有几大类？分别又有哪几种类型？（5）
           /*  简单数据类型,引用数据类型
            简单:String/Null/undefined/Number/boolean/Symbol
            引用: function/array/object/ */
                
        //  2.  如何进行数据类型的判断？有哪几种，分别可以判断到什么程度？（5）
                /* typeof() 会返回具体的数据类型，但是null和引用类型会返回object
                instanceof 判断当前这个数据是否为指定的数据类型
                Array,isArray(); 用来判断当前数据是否为数组
                Object.prototype.toString.call() 用来判断返回当前对象的每一个数据类型 */

        //  3.  undefined 和 null 的区别？什么时候会得到undefined？（5）
                /* undefined 代表未定义，没有赋值
                null 为空 */
                // 声明变量没有赋值的时候,没有接收到数据时候

        //  4.  使用 continue 或 break 终止循环时，两种方式的区别是？（5）
            /*   continue 当条件满足时在迭代一个循环
                break  直接退出当前循环 */
                
        //  5.  如何判断字符串内是否包含指定字符？（5）
                // indexOf/includes/search
        
        //  6.  请尽量列举出数组的方法，并且注明哪些方法会修改原数组，哪些不会；（5）
            /* sort(); 排序 //会修改原数组
            some()  元素满足条件时返回
            push()  推入
            pop()
            shift() 删除后面保留第一位
            unshift() 往前面添加
            concat() 返回一个新数组
            join()  （不会）
            slice()    截取数组里面的值 （不会）
            splice()   里面的三个属性，插入，替换，删除（会改变原数组）
            */

        //  7.  输出从小到大排序好的五个不重复的随机"素数",范围[10-58]；（10）
        
       /*  function getPrtime(){
            while(true){
                const random = parseInt(Math.random() * 48 + 10);
                for(let i = 2; i < random; i++){
                    
                    if(random % i == 0){
                        continue;
                    }
                }
                return random;
            }
        }
        console.log(getPrtime()); */
        
        //  8.  请写出以下输出的结果；（10）
        /* var bar = true, number = 0;
        console.log(bar + 0);   // 1
        console.log(bar + "xyz");   // truexyz
        console.log(bar + true);    // 2
        console.log(+true);     // 1
        console.log(!'bluej');  // false
        console.log(number++);  // 0
        console.log(++number);  // 2
        console.log(number);    // 2 */

        //  9.  什么是事件委托，为什么需要事件委托？如何实现事件委托？(用代码实现)（10）
    /*  利用事件冒泡，指定一个事件处理程序，就能够管理一系列的所有事件
        e.target(); */

        //  10. 将多个数组进行合并去重；（10）
        // var arr1 = [1, 2, 3],arr2 = [2, 3, 4, 5];

        // arr2.reduce((prev, curr) => {
        //     if (!prev.includes(curr)) {
        //         prev.push(curr)
        //     }
        //     return prev
        // }, arr1)

        // arr2.forEach(item => {
        //     if (!arr1.includes(item)) {
        //         arr1.push(item)
        //     }
        // })
    

        //  11. 找出数组中年龄小于18岁的女生的信息重新组成新的数组,并且将她们count变为现有的平方（10）
        /* var arr3 = [
            { name: "111", sex: "boy", age: 18, count: 20 },
            { name: "222", sex: "girl", age: 17, count: 30 },
            { name: "333", sex: "boy", age: 16, count: 40 },
            { name: "444", sex: "girl", age: 15, count: 50 },
            { name: "555", sex: "boy", age: 20, count: 60 },
            { name: "666", sex: "girl", age: 13, count: 70 },
            { name: "777", sex: "boy", age: 14, count: 80 }

            
        ] */

        /* const newArr = []
        arr3.forEach(function (item) {
            if (item.age < 18 && item.sex === 'girl') {
                newArr.push(Math.pow(item.count, 2))
            }
        })
        console.log(newArr); */

        //  12. 简述一下什么是深浅拷贝？怎么实现深浅拷贝？（20）
            
    </script>
</body>

</html>